/**
 * Paquete que contiene los objetos.
 */
package co.sumset.objetos;

/**
 * Clase Bomba, poder especial el cual 
 * representa el objeto que elimina al virus.
 * 
 * @author Cristian Raul Pineda Rodriguez
 */
public class Bomba extends Actor {
	
	public static final int UP_LEFT = 0, UP = 1, UP_RIGHT = 2, LEFT = 3, RIGHT = 4, DOWN_LEFT = 5, DOWN = 6, DOWN_RIGHT = 7;// Valor para determinar la ubicacion de una bomba
	protected final int BOMB_SPEED = stage.getAdministrador().getNivel().getBala_speed();; //Cantidad de bombas
	protected int vx;//Ubicacion en el eje X
	protected int vy;//Ubicacion en el eje Y
	
	/**
	 * Metodo Constructor, recibe  como parametros los datos para ser creado y ubicado en el escenario.
	 * 
	 * @param stage
	 * @param heading
	 * @param x
	 * @param y
	 * @param imagen
	 */
	public Bomba(Escenario stage, int heading, int x, int y,String imagen) {
		super(stage);
		this.stage=stage;
		this.$varX = x;
		this.$varY = y;
		String sprite ="";
		switch (heading) {
			case UP_LEFT : vx = -BOMB_SPEED; vy = -BOMB_SPEED; sprite=imagen;break;
			case UP : vx = 0; vy = -BOMB_SPEED; sprite=imagen;break;
			case UP_RIGHT: vx = BOMB_SPEED; vy = -BOMB_SPEED; sprite=imagen;break;
			case LEFT : vx = -BOMB_SPEED; vy = 0; sprite = imagen;break;
			case RIGHT : vx = BOMB_SPEED; vy = 0; sprite = imagen;break;
			case DOWN_LEFT : vx = -BOMB_SPEED; vy = BOMB_SPEED; sprite=imagen;break;
			case DOWN : vx = 0; vy = BOMB_SPEED; sprite = imagen;break;
			case DOWN_RIGHT : vx = BOMB_SPEED; vy = BOMB_SPEED; sprite = imagen;break;
		}   
		setSpriteNames( new String[] {sprite});
	}
	
	/**
	 * Este metodo permite ejecutar acciones para un Bomba.
	 * Se simula el movimiento de la bomba en el escenario.
	 * Una vez la bomba exceda el limite del escenario
	 * es removida del escenario.
	 */
	public void act() {
		super.act();
		$varY+=vy;
		$varX+=vx;
		if ($varY < 0 || $varY > Escenario.HEIGHT || $varX < 0 || $varX > Escenario.WIDTH)
		  remove();
	}
	
	/**
	 * Este metodo permite verificar las collisiones con otros Actores en el 
	 * caso de la Bomba si los Actores son: Laser; si estos colisionan con la
	 * Bomba esta es removida del escenario
	 * 
	 * @param a ; Recibe los actores que colisionan en el Escenario con la Bomba.
	 */
	 public void collision(Actor a) {

	  		if (a instanceof Laser ) {
	  			remove();
	  		}
	  	}
}